// 模态框中显示Auth的树形结构数据
function generateAuthTree() {

    // 1.发送Ajax请求查询数据
    var ajaxReturn = $.ajax({
        url: "assign/get/all/auth.json",
        type: "post",
        async: false,
        dataType: "json"
    });

    if (ajaxReturn.status != 200) {
        layer.msg("请求处理出错！响应状态码是" + ajaxReturn.status + "说明是：" + ajaxReturn.statusText);
        return;
    }
    // 2. 从响应结果中获取Auth的JSON数据
    // 从服务器端查询到的1ist不需要组装成树形结构，这里我们交给zTree去组装
    var resultEntity = ajaxReturn.responseJSON;

    if (resultEntity.operationResult == "FAILED") {
        layer.msg("操作失败！" + resultEntity.message);
    }

    if (resultEntity.operationResult == "SUCCESS") {
        var authList = resultEntity.queryData;
        // 3.准备对zTree的设置
        var setting = {
            "data": {
                "simpleData": {
                    // 开启简单JSON
                    "enable": true,
                    // 通过pIdKey属性设置父节点的属性名，而不使用默认的pId
                    "pIdKey": "categoryId"
                },
                // 使用Title属性显示节点名称，不使用默认的name做属性名称
                "key": {
                    "name": "title"
                }
            },
            "check": {
                "enable":true
            }
        };


        // 4.生成树形结构
        $.fn.zTree.init($("#authTreeDemo"), setting, authList);

        // 5.设置节点默认是展开的
        // 5.1 得到zTreeObj
        var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
        // 5.2 设置默认展开
        zTreeObj.expandAll(true);

        // ----------回显部分----------

        // 回显（勾选）后端查出的匹配的权限
        ajaxReturn = $.ajax({
            url: "assign/get/checked/auth/id.json",
            type: "post",
            dataType: "json",
            async: false,
            data:{
                "roleId":window.roleId
            }
        });

        if (ajaxReturn.status != 200){
            layer.msg("请求出错！错误码："+ ajaxReturn.status + "错误信息：" + ajaxReturn.statusText);
            return ;
        }

        resultEntity = ajaxReturn.responseJSON;

        if (resultEntity.operationResult == "FAILED"){
            layer.msg("操作失败！"+resultEntity.message);
        }

        if (resultEntity.operationResult == "SUCCESS"){
            var authIdArray = resultEntity.queryData;

            // 遍历得到的autoId的数组
            // 根据authIdArray勾选对应的节点
            for (var i = 0; i < authIdArray.length; i++){
                var authId = authIdArray[i];

                // 通过id得到treeNode
                var treeNode = zTreeObj.getNodeByParam("id",authId);

                // checked设置为true，表示勾选节点
                var checked = true;

                // checkTypeFlag设置为false，表示不联动勾选，
                // 即父节点的子节点未完全勾选时不改变父节点的勾选状态
                // 否则会出现bug：前端只要选了一个子节点，传到后端后，下次再调用时，发现前端那个子节点的所有兄弟节点也被勾选了，
                // 因为在子节点勾选时，父节点也被勾选了，之后前端显示时，联动勾选，导致全部子节点被勾选
                var checkTypeFlag = false;

                // zTreeObj的checkNode方法 执行勾选操作
                zTreeObj.checkNode(treeNode,checked,checkTypeFlag);
            }
        }

    }



}

// 声明专门函数显示确认模态框
function showConfirmModal(roleArray) {

    // 打开模态框
    $("#confirmModal").modal("show");

    // 清除旧模态框中的数据
    $("#roleNameDiv").empty();

    // 创建全局变量数组，用于存放要删除的roleId
    window.roleIdArray = [];

    // 遍历roleArray数组
    for (var i = 0; i < roleArray.length; i++) {
        var role = roleArray[i];
        var roleName = role.roleName;

        $("#roleNameDiv").append(roleName + "&nbsp;");

        var roleId = role.roleId;

        // 将当前遍历到的roleId放入全局变量
        roleIdArray.push(roleId);

    }

}


// 执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
function generatePage() {

    // 1.获取分页数据
    var pageInfo = getPageInfoRemote();

    // 2.填充表格
    fillTableBody(pageInfo);

}

// 远程访问服务器程序，获取pageInfo数据
function getPageInfoRemote() {

    // 调用$.ajax()函数发送请求，并用ajaxResult接收函数返回值
    var ajaxResult = $.ajax({
        "url": "role/get/page/Info.json",
        "type": "post",
        // 页码、页大小、关键字均从全局变量中获取
        "data": {
            "pageNum": window.pageNum,
            "pageSize": window.pageSize,
            "keyword": window.keyword
        },
        "dataType": "json",  // 关闭异步模式，使用同步，这是为了显示页面时保持现有的顺序
        "async": false,
    });

    // console.log(ajaxResult)

    // 判断当前响应是否为200
    var statusCode = ajaxResult.status;

    // 如果当前响应状态码不为200 说明发生了错误或其他意外状况，显示错误信息，让当前函数停止执行
    if (statusCode !== 200) {
        layer.msg("失败！响应状态码" + statusCode + " 说明信息：" + ajaxResult.statusText);
        return null;
    }

    // 如果响应状态码为200 说明请求处理成功，获取pageInfo
    var resultEntity = ajaxResult.responseJSON;

    // 从resultEntity中获取result属性
    var result = resultEntity.result;

    // 判断result是否为success
    if (result === "FAILED") {
        layer.msg(resultEntity.message);
        return null;
    }

    // 确认result为成功后获取pageInfo
    var pageInfo = resultEntity.queryData;

    // 返回pageInfo
    return pageInfo;

}

// 填充表格，显示主体数据
function fillTableBody(pageInfo) {

    // 清除tbody中的旧内容
    $("#rolePageBody").empty();

    // 使无查询结果时，不显示导航条
    $("#Pagination").empty();

    // 判断pageInfo是否有效
    if (pageInfo == null || pageInfo == undefined || pageInfo.list == null || pageInfo.list.length == 0) {


        $("#rolePageBody").append("<tr><td colspan='4'>抱歉！没有查询到您搜索的数据！</td></tr>>")

        return;
    }

    // 使用pageInfo的list属性填充tbody
    for (var i = 0; i < pageInfo.list.length; i++) {

        var role = pageInfo.list[i];

        var roleId = role.id;

        var roleName = role.name;

        var numberTd = "<td>" + (i + 1) + "</td>";
        var checkBoxTd = "<td><input class='itemBox' type='checkbox'></td>";
        var roleNameTd = "<td>" + roleName + "</td>";

        var checkBtn = "<button id='" + roleId + "' type='button' class='btn btn-success btn-xs checkBtn'><i class=' glyphicon glyphicon-check'></i></button>"

        var pencilBtn = "<button id='" + roleId + "' type='button' class='btn btn-primary btn-xs pencilBtn'><i class=' glyphicon glyphicon-pencil'></i></button>"

        var removeBtn = "<button id='" + roleId + "' type='button' class='btn btn-danger btn-xs removeBtn'><i class=' glyphicon glyphicon-remove'></i></button>"


        // 拼接三个小按钮成一个td
        var buttonTd = "<td>" + checkBtn + " " + pencilBtn + " " + removeBtn + "</td>";

        // 将所有的td拼接成tr
        var tr = "<tr>" + numberTd + checkBoxTd + roleNameTd + buttonTd + "</tr>";
        // console.log(tr);
        // 将拼接后的结果，放入id=rolePageTBody
        $("#rolePageBody").append(tr);

    }
    // 生成分页导航条
    generateNavigator(pageInfo);

}

// 生成分页页码导航条
function generateNavigator(pageInfo) {
    // 获取分页数据中的总记录数
    var totalRecord = pageInfo.total;

    // 声明Pagination设置属性的JSON对象
    var properties = {
        "num_edge_entries": 3,                                // 边缘页数
        "num_display_entries": 5,                             // 主体页数
        "callback": paginationCallBack,                       // 点击各种翻页反扭时触发的回调函数（执行翻页操作）
        "current_page": (pageInfo.pageNum - 1),                 // 当前页码
        "prev_text": "上一页",                                 // 在对应上一页操作的按钮上显示的文本
        "next_text": "下一页",                                 // 在对应下一页操作的按钮上显示的文本
        "items_per_page": pageInfo.pageSize                    // 每页显示的数量
    };
    // pagination()方法就是上面的js文件提供的，需要传入总记录数与上面的json对象
    $("#Pagination").pagination(totalRecord, properties);

}

// 翻页时回调函数
function paginationCallBack(pageIndex, JQuery) {
    // pageIndex是当前点击的页码的索引，索引从0开始计算，因此比pageNum小1
    window.pageNum = pageIndex + 1;

    $("#summaryBox").prop("checked", false);

    // 重新执行分页代码
    generatePage();

    // 取消当前超链接的默认行为
    return false;
}


